perm filename PIC2.F4[P,LCS] blob sn#084639 filedate 1974-01-26 generic text, type T, neo UTF8
00100		SUBROUTINE PIC2
00200	
00300	CC	COMMON/DP/IDP(4000)
00400	CC	CALL DPYSET(1,IDP,4000)
00500	
00600		EQUIVALENCE(LIST,CURV)
00700	
00800		DIMENSION CURV(2,3000),HIST(0/63),DIF(3)
00900	
01000		COMMON /EDGEC/ A0,A1,A2,A3,A4,A5,A6,A7,
01100		1 DEBUG,TE(1),XP(1),YP(1),PARMAX,
01200		1 HALF,FILE,RR,COH,RX,RY,CL,SL,D,B,FOUND
01300	
01400		COMMON /LISTC/JXX(4000),LIST(6,1000),LIST5(0/1000),NEWEND,LO
01500	
01600		COMMON/COMMAC/BCLIP,TCLIP,BITS,IWID,LINLEN,FLINE,LLINE,
01700		1 LSIDE,RSIDE,JCNT,HYSTAB(1)
01800	
01900		INTEGER FI,FILEN,EWE,HIST,BITS,
02000		1 XIX,XI,FLINE,RSIDE,
02100		1 NUM2,NUM3,IDD,PL,LIST5,X
02200	
02300		REAL LIST,RR,CL,SL,LEAP,LEA6,LEA3,CONST,FRAC,
02400		1 RX,RY,TEXT,TH,W1,W2,B1,B2,V1,V2,
02500		1 LV,LW,LB,D1,D2,CURV,T,X1,X2,A1,A2,C1,C2,MA,LC,
02600		1 D,B,DIF,B0,BB1,C3,C4
02700		DATA JCNT/0/,RTO/6./
02800		DIF(1)=0.0
02900		B0=0.0
03000		BB1=2**BITS-1
03100		CONST=2.41
03200		IF(FLINE.EQ.0.AND.LSIDE.EQ.0.AND.
03300		1 LLINE.EQ.252.AND.RSIDE.EQ.251) CONST=CONST*.6667
03400	68	LEAP=(RR/2.+CONST)*RTO
03500		LEA6=LEAP/6.
03600		LEA3=LEAP/3.
03700		TH=(LEAP**2)*0.075
03800	
03900		DO 70 IDD=0,63
04000	70	HIST(IDD)=0
04100		FRAC=64.0/FLOAT(2**BITS)
04200		DO 100 XIX=1,NEWEND
04300		IDD=IFIX(LIST(5,XIX)*FRAC+0.5)
04400		IF(0.GT.IDD) IDD=0
04500		IF(63.LT.IDD) IDD=63
04600		HIST(IDD)=HIST(IDD)+1
04700	100	CONTINUE
04800	
04900		DO 110 IDD=1,63
05000	110	HIST(IDD)=HIST(IDD)+HIST(IDD-1)
05100		IF(HIST(63).NE.NEWEND) PAUSE 'ERROR IN PLOU'
05200		NUM2=IFIX(FLOAT(NEWEND)/3.+0.5)
05300		NUM3=IFIX(FLOAT(NEWEND)*2./3.+0.5)
05400		DO  121 IDD=1,63
05500		IF(NUM2.GE.(HIST(IDD)+HIST(IDD-1))/2) DIF(2)=FLOAT(
05600		1 IDD)/FRAC
05700	121	IF(NUM3.GE.(HIST(IDD)+HIST(IDD-1))/2) DIF(3)=FLOAT(
05800		1 IDD)/FRAC
05900	
06000		DO 123 I=0,1000
06100	123	LIST5(I)=1
06200	
06300	125	XI=1
06400		DO 120 XIX=1,NEWEND
06500		D=LIST(5,XIX)
06600		B=LIST(6,XIX)
06700		IF(((B+D.LT.B0+DIF(1)).OR.(B.GT.BB1-DIF(1)
06800		1 )).OR.(D.LT.DIF(1))) GOTO 120
06900		RX=LIST(1,XIX)*RTO
07000		RY=LIST(2,XIX)*RTO
07100		CL=LIST(3,XIX)*LEA6
07200		SL=LIST(4,XIX)*LEA6
07300		CURV(1,XI)=RX-SL
07400		CURV(2,XI)=RY+CL
07500		CURV(3,XI)=RX+SL
07600		CURV(4,XI)=RY-CL
07700		IF(((B+D.LT.B0+DIF(2)).OR.(B.GT.BB1-DIF(2)
07800		1 )).OR.(D.LT.DIF(2))) GOTO 118
07900		LIST5((XI-1)/2)=2
08000		IF(((B+D.LT.B0+DIF(3)).OR.(B.GT.BB1-DIF(3)
08100		1 )).OR.(D.LT.DIF(3))) GOTO 118
08200		LIST5((XI-1)/2)=3
08300	118	XI=XI+2
08400	120	CONTINUE
08500	
08600	CC	DO 400 PL=1,3
08610		PL=1
08700	
08800	CC	GOTO(140,130,130),PL
08900	CC130	X=1
09000	CC	DO 136 XI=1,EWE-3,2
09100	CC	I=(XI-1)/2
09200	CC	IF(LIST5(I).LT.PL) GOTO 136
09300	CC	C1=CURV(1,XI)
09400	CC	C2=CURV(2,XI)
09500	CC	C3=CURV(3,XI)
09600	CC	C4=CURV(4,XI)
09700	CC	CURV(1,X)=C1
09800	CC	CURV(2,X)=C2
09900	CC	CURV(3,X)=C3
10000	CC	CURV(4,X)=C4
10100	CC	LIST5((X-1)/2)=LIST5(I)
10200	CC	X=X+2
10300	CC136	CONTINUE
10400	CC	XI=X
10500	
10600	140	EWE=XI+1
10700		FI=1
10800		LA=0
10900		DO 135 XIX=4,EWE,2
11000		LI=XIX-2
11100	
11200		IF((2.*CURV(1,LI)-CURV(1,XIX-3)-2.*CURV(1,XIX-1)+
11300		1 CURV(1,XIX))**2+(2.*CURV(2,LI)-CURV(2,XIX-3)-
11400		1 2.*CURV(2,XIX-1)+CURV(2,XIX))**2.LT.TH) GOTO 135
11500	
11600		LA=LI
11700		KI=FI+1
11800	CC	IF(KI.EQ.LA) GOTO 200
11900	CC	IF(PL.GT.1) GOTO 200
12000	
12100	CC	CURV(1,FI)=CURV(1,FI)*1.5-CURV(1,KI)*0.5
12200	CC	CURV(2,FI)=CURV(2,FI)*1.5-CURV(2,KI)*0.5
12300	CC	CURV(1,LA)=CURV(1,LA)*1.5-CURV(1,LA-1)*0.5
12400	CC	CURV(2,LA)=CURV(2,LA)*1.5-CURV(2,LA-1)*0.5
12500	
12600	200	CALL PACK(JCNT,CURV(1,FI),CURV(2,FI),3)
12700	2002	NI=LA-2
12800		JI=FI-1
12900		DO 210 I=JI,NI
13000		KI=I+1
13100		LI=KI+1
13200		MI=LI+1
13300		B1=CURV(1,LI)-CURV(1,KI)
13400		B2=CURV(2,LI)-CURV(2,KI)
13500		IF (I.EQ.JI) GOTO 202
13600		A1=CURV(1,KI)-CURV(1,I)
13700		A2=CURV(2,KI)-CURV(2,I)
13800		GOTO 204
13900	202	A1=B1
14000		A2=B2
14100	204	IF (I.EQ.NI) GOTO 206
14200		C1=CURV(1,MI)-CURV(1,LI)
14300		C2=CURV(2,MI)-CURV(2,LI)
14400		GOTO 208
14500	206	C1=B1
14600		C2=B2
14700	208	MA=A1**2+A2**2
14800		LB=B1**2+B2**2
14900		LC=C1**2+C2**2
15000		V1=A1*LB+B1*MA
15100		V2=A2*LB+B2*MA
15200		W1=B1*LC+C1*LB
15300		W2=B2*LC+C2*LB
15400		LV=SQRT(V1**2+V2**2)
15500		LW=SQRT(W1**2+W2**2)
15600		LB=SQRT(LB)
15700	CC	IF (LV.LT.1.E-6.OR.LW.LT.1.E-6) PAUSE 'LV LW'
15800		AA=LB*.5858
15900		AB=AA/LW
16000		AA=AA/LV
16100		V1=V1*AA
16200		V2=V2*AA
16300		W1=W1*AB
16400		W2=W2*AB
16500		D1=B1-V1-W1
16600		D2=B2-V2-W2
16700	
16800		DO 220 K=1,8
16900		T=FLOAT(K)/8.
17000		T1=2.-T
17100		T2=3.-2.*T
17200	220	CALL PACK(JCNT,(CURV(1,KI)+(V1*T1+(W1+D1*T2)*T)*T+.5),
17300		1 (CURV(2,KI)+(V2*T1+(W2+D2*T2)*T)*T+.5),2)
17400	210	CONTINUE
17500	
17600	135	FI=LA+1
17700	CC	IF(PL.EQ.3)RETURN
17800	CC	JCNT=JCNT+1
17900	CC400	JXX(JCNT)=-1	
18000	C  -1 INDICATES 2ND OR 3RD RUN TO BEGIN NOW.
18100	1001 	FORMAT(A1)
18101		END
18110	
18300		SUBROUTINE PACK(J,X,Y,N)
18400		COMMON /LISTC/JXX(4000),LIST(6,1000),LIST5(0/1000),NEWEND,LO
18500	CC	COMMON/DP/IDP(4000)
18600		DATA II/10/
18700		IF(J.GE.4000)RETURN
18800		L=Y
18900		M=X
19310	4	IF(N.EQ.3)GO TO 5
19320		IX=IX+1
19330		IF(IX.LT.II)RETURN
19340		IX=0
19350	C  DISPLAYS EVERY IIth LINE
19400		IF((M.EQ.MA.AND.M.EQ.MB).OR.(L.EQ.LA.AND.L.EQ.LB))J=J-1
19500	C  TO AVOID SEVERAL POINTS ON STRAIGHT LINE
19600		MB=MA
19700		LB=LA
19800		MA=M
19900		LA=L
20000	5	K=M*100000+L
20100	3	IF(N.EQ.3)K=-K
20200	CC	IF(N.EQ.3)GO TO 8
20300	CC	IF(II.NE.J)CALL AVECT(M-380,L-200)
20400	CC	CALL DPYOUT(1)
20500	CC	GO TO 9
20600	CC8	CALL AIVECT(M-380,L-200)
20700	9	J=J+1
20800		JXX(J)=K
20900	CC	II=J
21000	CC1	FORMAT(I5,I,I5,I4)
21100		END